home *** CD-ROM | disk | FTP | other *** search
/ Languguage OS 2 / Languguage OS II Version 10-94 (Knowledge Media)(1994).ISO / language / parallax / more_exa.tar / more / X / xbeuys.p < prev    next >
Text File  |  1992-11-30  |  3KB  |  88 lines

  1. SYSTEM beuys;
  2. CONST maxnode = 100;
  3.       length  = maxnode * 3;
  4.       part    = length div 2;
  5.  
  6. SCALAR   ch : CHAR;
  7.             win : CARDINAL;
  8.  
  9. CONFIGURATION line [maxnode];
  10. CONNECTION    left  : line[i]  -> line[i-1].right;
  11.  
  12. VECTOR   x1,x2,x3,x4,y1,y2,y3,y4 : INTEGER;
  13.  
  14. PROCEDURE plot(VECTOR x, y : integer; SCALAR c: COLOR);
  15. VECTOR xnext, dx, px, ynext, dy, py, m, t, i: integer;
  16.  
  17.    PROCEDURE VSIGN(VECTOR i : integer) : VECTOR integer;
  18.    VECTOR erg : integer;
  19.    BEGIN
  20.          IF i = 0 THEN erg := 0 ELSE erg := i div ABS(i) END;
  21.          RETURN (erg);
  22.    END VSIGN;
  23.  
  24. BEGIN
  25.    Setcolor(c);
  26.    PROPAGATE.left(x,xnext); dx := xnext - x;
  27.    PROPAGATE.left(y,ynext); dy := ynext - y;
  28.    IF DIM1 # REDUCE.max(DIM1) THEN
  29.       IF ABS(dx) < ABS(dy) THEN
  30.            IF dy < 0 THEN
  31.               dec(xnext,dx); inc(x,dx); dx := -dx;
  32.               dec(ynext,dy); inc(y,dy); dy := -dy;
  33.            END;
  34.            px := x; m := 0; i := VSIGN(dx); dx := ABS(dx); t := dy div 2;
  35.            FOR py := y TO ynext DO
  36.               SetPixel(px,py);
  37.               inc(m,dx);
  38.               IF m > t THEN inc(t,dy); inc(px,i); END;
  39.            END;
  40.       ELSE
  41.            IF dx < 0 THEN
  42.               dec(xnext,dx); inc(x,dx); dx := -dx;
  43.               dec(ynext,dy); inc(y,dy); dy := -dy;
  44.            END;
  45.            py := y; m := 0; i := VSIGN(dy); dy := ABS(dy); t := dx div 2;
  46.            FOR px := x TO xnext DO
  47.               SetPixel(px,py);
  48.               inc(m,dy);
  49.               IF m > t THEN inc(t,dx); inc(py,i); END;
  50.            END;
  51.       END;
  52.    END;
  53. END plot;
  54.  
  55. BEGIN (* main *)
  56.    win := OpenAbsWindow(length,length);
  57.    PARALLEL
  58.       IF EVEN(DIM1) THEN
  59.            x1 := VIRandom() MOD part;
  60.            y1 := VIRandom() MOD part;
  61.            x2 := VIRandom() MOD part;
  62.            y2 := length - VIRandom() MOD part;
  63.            x3 := VIRandom() MOD part;
  64.            y3 := part div 2 + VIRandom() MOD part;
  65.            x4 := part div 2 + VIRandom() MOD part;
  66.            y4 := VIRandom() MOD part;
  67.       ELSE
  68.            x1 := length - VIRandom() MOD part;
  69.            y1 := length - VIRandom() MOD part;
  70.            x2 := length - VIRandom() MOD part;
  71.            y2 := VIRandom() MOD part;
  72.            x3 := length - VIRandom() MOD part;
  73.            y3 := part div 2 + VIRandom() MOD part;
  74.            x4 := part div 2 + VIRandom() MOD part;
  75.            y4 := length - VIRandom() MOD part;
  76.       END;
  77.       plot(x1, y1, COLOR(0,0,0));
  78.       plot(x2, y2, COLOR(200,200,200));
  79.       plot(x3, y3, COLOR(120,120,120));
  80.       plot(x4, y4, COLOR(170,170,170));
  81.    ENDPARALLEL;
  82.  
  83.    WriteString("Press RETURN for termination"); WriteLn;
  84.    Read(ch);
  85.    CloseWindow(win);
  86. END beuys.
  87.  
  88.